//Copyright 2008 Kristian Gundry And Rune Juhl-Petersen
//This file is part of Plain.

//Plain is free software: you can redistribute it and/or modify
//it under the terms of the GNU Lesser General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//any later version.

//Plain is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU Lesser General Public License for more details.

//You should have received a copy of the GNU Lesser General Public License
//along with Plain.  If not, see <http://www.gnu.org/licenses/>.
using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
using Plain;
using Plain.Search;

namespace Plain.Test.Domain
{
	[TestFixture]
	public class Search
	{
		[Test]
		public void PropertyIdentifierOperators() {
			PropertyIdentifier navn = new PropertyIdentifier("navn");
			Assert.AreEqual(((SimpleCriteria)(navn != "asdf")).Type, SimpleCriteriaType.NotEqual);
			Assert.AreEqual(((SimpleCriteria)(navn == "asdf")).Type ,SimpleCriteriaType.Equal);
			Assert.AreEqual(((SimpleCriteria)(navn > "asdf")).Type, SimpleCriteriaType.GreaterThan);
			Assert.AreEqual(((SimpleCriteria)(navn < "asdf")).Type, SimpleCriteriaType.LessThan);
			Assert.AreEqual(((SimpleCriteria)(navn >= "asdf")).Type, SimpleCriteriaType.GreaterThanOrEqual);
			Assert.AreEqual(((SimpleCriteria)(navn <= "asdf")).Type, SimpleCriteriaType.LessThanOrEqual);


		}
		[Test]
		public void CriteriaOperators() { 
			PropertyIdentifier navn = new PropertyIdentifier("navn");
			Criteria crit = navn == "rune" | navn < "kaj";
			Assert.IsInstanceOfType(typeof(CriteriaCollection), crit);
			CriteriaCollection col =crit as CriteriaCollection;

			Assert.AreEqual(CriteriaCollectionType.OneOf,col.Type);
			crit = navn == "rune" & navn < "kaj";
			Assert.IsInstanceOfType(typeof(CriteriaCollection), crit);
			col = crit as CriteriaCollection;

			Assert.AreEqual(CriteriaCollectionType.AllOf, col.Type);
		}
		[Test]
		public void CriteriaStructure() {
			PropertyIdentifier navn = new PropertyIdentifier("navn");
			Criteria crit1 = navn == "fsdf";
			Criteria crit2 = navn < "fsdf";
			Criteria crit3 = (crit1 | crit2) & crit2;
			Assert.IsInstanceOfType(typeof(CriteriaCollection), crit3);
			CriteriaCollection col = (CriteriaCollection)crit3;
			Assert.AreEqual(2, col.Criterias.Count);
			Assert.AreEqual(CriteriaCollectionType.AllOf, col.Type);
		}
	}
}
